/**   
* @Title: JsonUtils.java 
* @Package com.git.gather 
* @Description: json相关工具类
* @author fanqinghui100@126.com   
* @date 2014年6月12日 上午11:24:42 
* @version V1.0   
*/ 
package com.git.gather;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import com.fasterxml.jackson.databind.ObjectMapper;

/**
 * @author fanqinghui100@126.com
 */
public class JsonUtils {
	/**
	 * 把对象转换成Json格式，支持JavaBean、Map、List
	 * @param obj
	 * @return
	 * @throws IOException
	 */
	public static String convertToString(Object obj) throws IOException {
		
		if(obj == null) return null;
		
		//通过jackson转换为json值
		ObjectMapper om = new ObjectMapper();
		return om.writeValueAsString(obj);
	}
	
	/**
	 * 把Json字符串读取成对象格式
	 * @param <T>
	 * @param str
	 * @param cla
	 * @return
	 * @throws IOException
	 */
	public static <T> T readToObject(String str, Class<T> cla) throws IOException{
		
		if(str == null || str.isEmpty()) return null;
		
		ObjectMapper om = new ObjectMapper();
		return om.readValue(str, cla);
	}
	
	/**
	 * 将JSON格式的请求参数转换为Java对象
	 * @param str
	 * @return
	 * @throws JSONException
	 */
	public static List<Map<String,Object>> getListByJsonString(String str) throws JSONException{
		List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
		JSONArray jnrule = new JSONArray(str);
		//过滤列
    	int k = jnrule.length();
    	for (int r = 0; r < k;r++) {
    		JSONObject jsonObj = jnrule.getJSONObject(r);
            Iterator<?> it = jsonObj.keys();
            Map<String,Object> item = new HashMap<String,Object>();
            while (it.hasNext()) {  
                String key = (String) it.next();  
                String value = jsonObj.getString(key);
                item.put(key, value);
            }
            list.add(item);
    	}
		return list;
	}
}
